
var express = require('express')
var router = express.Router()
var {user_model,role_model,anno_model,comment_model} = require('../db/model') 
var {FindOneDataMore, InsertManyData , UpdateTableData,FindTableData,RemoveTableData} = require('../db')
var axios = require("axios")
const { getToken, checkToken } = require('../utils/token')
var multer = require("multer")

router.get("/test",(req,res)=>{
    res.json({
        code:200,
        msg:"Test = TEst = 测试Api 接口 ",
        result:null
    })
})

// Vue3.0 接口的接口 

router.post("/register",(req,res)=>{
    var body = req.body;
    // 先判断再去注册
    FindOneDataMore({
        model:user_model,
        query:{
            $or:[
                {
                    username:body.username 
                },
                {
                    phone:body.phone 
                }
            ]
        },
        res,
        callback(result){
            if(result){
                res.json({
                    code:401,
                    msg:"用户已经存在,请重新注册",
                    result,
                })
            }else{
                body.time  = new Date()
                InsertManyData({
                    model:user_model,
                    data:body,
                    msg:"注册成功",
                    res 
                })
                // user_model.insertMany(body)
                // .then(data=>{
                //     res.json({
                //         code:200,
                //         msg:"注册成功",
                //         result:data 
                //     })
                // })
            }
        }
    })
    // user_model.findOne({
    //     $or:[
    //         {
    //             username:body.username 
    //         },
    //         {
    //             phone:body.phone 
    //         }
    //     ]
    // })
    // .then(result=>{
    //     if(result){
    //         res.json({
    //             code:401,
    //             msg:"用户已经存在,请重新注册",
    //             result,
    //         })
    //     }else{
    //         body.time  = new Date()
    //         user_model.insertMany(body)
    //         .then(data=>{
    //             res.json({
    //                 code:200,
    //                 msg:"注册成功",
    //                 result:data 
    //             })
    //         })
    //     }
    // })
    // .catch(err=>{
    //     res.json({
    //         code:500,
    //         msg:"服务器异常",
    //         err 
    //     })
    // })
})


// 登录
router.post("/login",(req,res)=>{
    var body  = req.body;
    FindOneDataMore({
        model:user_model,
        query:body, 
        res,
        callback(result){
            if(result){
                // Token  
                var token = getToken(body)  // 用户名和密码得到一个 token 
                res.json({
                    code:200,
                    msg:"登录成功",
                    result,
                    token 
                })
            }else{
                res.json({
                    code:401,
                    msg:"登录失败,用户名或者密码错误",
                    result,
                })
            }
        }
    })
})

// 发送验证码 
router.post("/sendcaptcha",(req,res)=>{
    var body = req.body;
    // 先去查询一下 
    // 再去发送验证码 
    FindOneDataMore({
        model:user_model,
        query:body,
        res,
        callback(result){
            if(result){
                // 发送验证code 
                axios.get("http://47.104.209.44:3333/captcha/sent",{
                    params:body // {phone:xxxxxx}
                })
                .then(({data})=>{
                    console.log(data)
                    if(data.code==200){
                        res.json({
                            code:200,
                            data,
                            msg:'验证码发送成功'
                        })
                    }else{
                        res.json({
                            code:401,
                            data,
                            msg:'验证码发送失败'
                        })
                    }
                    
                })
            }else{
                res.json({
                    code:401,
                    msg:'手机号未注册,请先注册',
                    result 
                })
            }
        }
    })
})

// 校验验证码 
router.post("/chechcaptcha",(req,res)=>{
    var body = req.body;  // phone captcha
    FindOneDataMore({
        model:user_model,
        query:{ phone: body.phone },
        res,
        callback(result){
            if(result){
                // 发送验证code 
                axios.get("http://47.104.209.44:3333/captcha/verify",{
                    params:body // {phone:xxxxxx}
                })
                .then(({data})=>{
                    // console.log(data);
                    // data.code==200
                    if(true){
                        res.json({
                            code:200,
                            data,
                            msg:'验证码校验成功'
                        })
                    }else{
                        res.json({
                            code:401,
                            data,
                            msg:'验证码校验失败'
                        })
                    }
                })
            }else{
                res.json({
                    code:401,
                    msg:'手机号未注册,请先注册',
                    result 
                })
            }
        }
    })
})

// 获取个人信息 
router.post("/getusreinfo",(req,res)=>{
    checkToken(req,res,({username})=>{
        FindOneDataMore({
            model:user_model,
            query:{username},
            msg:'获取个人信息成功',
            res 
        })
    })
})

// 上传文件 
const storage = multer.diskStorage({  // 硬盘存储 
    destination: function (req, file, cb) {
      cb(null, './public/images/uploads')
    },
    filename: function (req, file, cb) {
      const uniqueSuffix = "WH2114__"+Date.now() + '-' + Math.round(Math.random() * 1E9)   // 文件名、
      cb(null, file.fieldname + '-' + uniqueSuffix + file.originalname)
    }
})
  
const upload = multer({ storage: storage }).any()

// 上传文件 
router.post("/uploadfile",upload,(req,res)=>{
    var path = req.files[0].path
    res.json({
        code:200,
        msg:"上传成功",
        path,
        result:path 
    })
})

// 修改用户信息 
router.post("/changeuser",(req,res)=>{
    var body = req.body;
    checkToken(req,res,({username})=>{
        UpdateTableData({
            model:user_model,
            query:{username},
            data:{
                $set:body
            },
            res,
            msg:"成功"
        })
    })
})


// 权限列表 
router.post("/rolelist",(req,res)=>{
    checkToken(req,res,({username})=>{
        FindTableData({
            model:role_model,
            res,
            msg:"获取权限列表成功"
        })
    })
})

// role 添加
router.post("/roleadd",(req,res)=>{
    checkToken(req,res,({username})=>{
        InsertManyData({
            model:role_model,
            data:req.body,
            res,
            msg:'添加角色成功'
        })
    })
})


// role 修改
router.post('/roleupdate',(req,res)=>{
    checkToken(req,res,({username})=>{
        UpdateTableData({
            model:role_model,
            query:{
                _id:req.body._id
            },
            data:req.body , //
            res,
            msg:'修改成功' 
        })
    })
})

// 添加用户
router.post("/useradd",(req,res)=>{
    var body = req.body;
    // 先判断再去注册
    FindOneDataMore({
        model:user_model,
        query:{
            $or:[
                {
                    username:body.username 
                },
                {
                    phone:body.phone 
                }
            ]
        },
        res,
        callback(result){
            if(result){
                res.json({
                    code:401,
                    msg:"用户已经存在,请重新添加",
                    result,
                })
            }else{
                body.time  = new Date()
                InsertManyData({
                    model:user_model,
                    data:body,
                    msg:"添加成功",
                    res 
                })
            }
        }
    })
})

// role 修改
router.post('/userlist',(req,res)=>{
    console.log(req.body)
    var query = {}
    var {keyword,role} = req.body;
    if(keyword&&role){
        query={
            username:new RegExp(keyword),
            role:role * 1
        }
    }else if(role){
        query = {
            role:role  * 1
        }
    }else if(keyword){
        query = {
            username:new RegExp(keyword)
        }
    }
    checkToken(req,res,({username})=>{
        FindTableData({
            model:user_model,
            query:query,
            res,
            msg:'查询成功' 
        })
    })
})

// 删除用户 
router.post('/userremove',(req,res)=>{
    checkToken(req,res,({username})=>{
        RemoveTableData({
            model:user_model,
            query:req.body,
            res,
            msg:'删除成功' 
        })
    })
})

// 修改用户 
router.post('/userupdate',(req,res)=>{
    checkToken(req,res,({username})=>{
        UpdateTableData({
            model:user_model,
            query:{
                _id:req.body._id
            },
            data:req.body,
            res,
            msg:'修改成功' 
        })
    })
})



// 添加公告 
router.post("/addanno",(req,res)=>{
    var body = req.body
    checkToken(req,res,({username})=>{
        body.time = new Date()
        anno_model.insertMany(body)
        .then(result=>{
          res.json({
            code:200,
            msg:"公告添加成功",
            result
          })
        })
        .catch(err=>{
          res.json({
            code:500,
            msg:"服务器异常",
            err
          })
        })
    })
  })

// 修改公告 
  router.post('/annolist1',(req,res)=>{
   
   
    checkToken(req,res,({username})=>{
        FindTableData({
            model:anno_model,
            // query:query,
            res,
            msg:'查询成功' 
        })
    })
})


router.post('/annoremove',(req,res)=>{
    checkToken(req,res,({username})=>{
        RemoveTableData({
            model:anno_model,
            query:req.body,
            res,
            msg:'删除成功' 
        })
    })
})



router.post('/annoupdate',(req,res)=>{
    checkToken(req,res,({username})=>{
        UpdateTableData({
            model:anno_model,
            query:{
                _id:req.body._id
            },
            data:req.body,
            res,
            msg:'修改成功' 
        })
    })
})


// 获取comments 
router.post('/commentlist',(req,res)=>{
    FindTableData({
        model:comment_model,
        query:{},
        res,
        msg:"成功",
    })
})
// 删除
router.post('/commentdelete',(req,res)=>{
    RemoveTableData({
        model:comment_model,
        query:req.body,
        res,
        msg:'删除成功' 
    })
})
// 添加 
router.post('/commentadd',(req,res)=>{
    InsertManyData({
        model:comment_model,
        data:req.body,
        msg:"添加成功",
        res 
    })
})
// 修改  
router.post('/commentupdate',(req,res)=>{
    UpdateTableData({
        model:comment_model,
        query:{_id:req.body._id},
        data:req.body,
        msg:"修改成功",
        res 
    })
})

module.exports = router ;